package com.hqully.smartfumehood.mapper;

import com.github.pagehelper.PageInfo;
import com.hqully.smartfumehood.entity.Device;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hqully.smartfumehood.entity.dto.DeviceDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;



/**
 * <p>
 *     针对数据库表[device]的操作
 * </p>
 * @entity {@link Device}
 * @author liulingyu
 * @date 2022-05-12 09:59
 * @version 1.0
 */
@Mapper
public interface DeviceMapper extends BaseMapper<Device> {

    /**
     * <p>
     *     根据[queryVo]的参数条件查询设备
     * </p>
     * @date 2022/5/8 13:00 <br>
     * @author liulingyu <br>
     * @param query 查询参数
     * @return {@link PageInfo < DeviceDto>} 设备DTO列表
     */
    public List<DeviceDto> findAllDevice(Map query);

    /**
     * <p>
     *     根据设备状态查询设备
     * </p>
     * @deprecated 功能已整合至{@link #findAllDevice(QueryVo)}
     * @date 2022/5/8 13:05 <br>
     * @author liulingyu <br>
     * @param status 设备状态
     * @return {@link PageInfo< DeviceDto>} 设备DTO列表
     */
    public List<DeviceDto> findDeviceByStatus(@Param("status") Integer status);


    /**
     * <p>
     *     根据[did]查询设备
     * </p>
     * @date 2022/5/8 13:06 <br>
     * @author liulingyu <br>
     * @param did 设备ID
     * @return {@link DeviceDto} 设备DTO实体类
     */
    public DeviceDto findDeviceByDid(@Param("id") String did);

    /**
     * <p>
     *     根据[labId]查询设备
     * </p>
     * @deprecated 功能已整合至{@link #findAllDevice(QueryVo)}
     * @date 2022/5/8 13:07 <br>
     * @author liulingyu <br>
     * @param labId 实验室ID
     * @return {@link DeviceDto} 设备列表
     */
    public DeviceDto findDeviceByLabId(@Param("labId") String labId);

    /**
     * <p>
     *     根据[queryVo]的参数[unitId || status]条件查询设备数
     * </p>
     * @date 2022/5/8 13:01 <br>
     * @author liulingyu <br>
     * @param query 查询参数
     * @return {@link long} 设备数量
     */
    long findDeviceCount(Map query);


    /**
     * <p>
     *     添加设备
     * </p>
     * @date 2022/5/8 13:08 <br>
     * @author liulingyu <br>
     * @param device 设备实体类
     * @return {@link int}
     */
    public int addDevice(Device device);

    /**
     * <p>
     *     通过设备ID删除设备
     * </p>
     * @date 2022/5/8 13:09 <br>
     * @author liulingyu <br>
     * @param did 设备ID
     * @return {@link int}
     */
    public int deleteDevice(@Param("id") String did);

    /**
     * <p>
     *     更新设备
     * </p>
     * @date 2022/5/8 13:09 <br>
     * @author liulingyu <br>
     * @param device 设备实体类
     * @return {@link int}
     */
    public int updateDevice(Device device);

    /**
     * <p>
     *     更新设备的状态(开启/关闭/异常)
     * </p>
     * @date 2022/6/29 15:05 <br>
     * @author liulingyu <br>
     * @param status 设备状态：0:关闭,1:开启,2:异常
     * @param id 设备ID
     * @return {@link int}
     */
    int updateStatusById(@Param("status") Integer status, @Param("id") String id);


    /**
     * <p>
     *     根据[deviceId]查询设备所属单位ID
     * </p>
     * @date 2022/5/8 15:15 <br>
     * @author liulingyu <br>
     * @param deviceId 设备ID
     * @return {@link long} 单位ID
     */
    long findUnitIdByDeviceId(String deviceId);


}
